package com.kitty.poclient.widget; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import com.kitty.poclient.R; import com.kitty.poclient.adapter.LoginAdapter; import com.kitty.poclient.common.UpnpApp; import com.kitty.poclient.events.Event; import com.kitty.poclient.events.EventListener; import com.kitty.poclient.models.StateModel; import com.kitty.poclient.util.AnimUtil; /* * mvc -> View */ public class LoginView extends LinearLayout{ private static final boolean DEBUG = true; private static final String TAG = LoginView.class.getSimpleName(); public static final int MESSAGE_CHOSSE_DEVICE = 0; public static final int MESSAGE_CONNECT = 1; public static final int MESSAGE_START_SYNC = 2; public static final int MESSAGE_RECONNECT = 3; public static final int MESSAGE_CANCEL = 4; private LinearLayout viewStub; private LinearLayout llBtn; private LinearLayout llGradientCover; private Button loginBtn; private TextView loginHintTv; private TextView tvDeviderLine; private LayoutInflater inflater; private StateModel model; private LoginAdapter adapter; private SyncView syncView; private View footerView; private LoginViewListener listener; public void setListener(LoginViewListener listener){ this.listener = listener; } public interface LoginViewListener{//new LoginView.LoginViewListener() void onViewChange(int message, Object data); } public LoginView(Context context, AttributeSet attrs) { super(context, attrs); inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); model = StateModel.getInstance(); } @Override protected void onFinishInflate() { super.onFinishInflate(); viewStub = (LinearLayout)findViewById(R.id.login_viewstub); llGradientCover = (LinearLayout)findViewById(R.id.ll_gradient_cover); llBtn = (LinearLayout)findViewById(R.id.ll_btn); loginBtn = (Button)findViewById(R.id.login_btn); loginHintTv = (TextView)findViewById(R.id.tv_login_hint); tvDeviderLine = (TextView)findViewById(R.id.tv_divider_line); model.addListener(StateModel.ChangeEvent.STATE_CHANGED, stateChangeListener); } /* * received event from model */ private EventListener stateChangeListener = new EventListener() { @Override public void onEvent(Event event) { changeState(); } }; protected void changeState() { int state = model.getState(); switch(state){ case StateModel.STATE_LOADING: Log.i(TAG, "changeState-StateModel.STATE_LOADING"); setLoadingViews(); break; case StateModel.STATE_CHOOSE: Log.i(TAG, "changeState-StateModel.STATE_CHOOSE"); setChooseViews(); break; case StateModel.STATE_SYNC: Log.i(TAG, "changeState-StateModel.STATE_SYNC"); setSyncViews(); break; case StateModel.STATE_ERROR: Log.i(TAG, "changeState-StateModel.STATE_ERROR"); setErrorViews(); break; case StateModel.STATE_BOX_VERSION_LOW: Log.i(TAG, "changeState-StateModel.STATE_BOX_VERSION_LOW"); setBoxVersionLowViews(); break; default: //TODO Log.i(TAG, "changeState-default"); } } private void setBoxVersionLowViews() { tvDeviderLine.setVisibility(View.GONE); llGradientCover.setVisibility(View.GONE); setHint(null, View.INVISIBLE); llBtn.setVisibility(View.VISIBLE); loginBtn.setVisibility(View.VISIBLE); loginBtn.setText(R.string.login_retry); loginBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { listener.onViewChange(MESSAGE_RECONNECT, null); } }); LinearLayout ll = (LinearLayout)inflater.inflate(R.layout.layout_login_boxversion_low, null); ll.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); viewStub.removeAllViews(); viewStub.addView(ll); } private void setErrorViews() { tvDeviderLine.setVisibility(View.GONE); llGradientCover.setVisibility(View.GONE); loginBtn.setVisibility(View.VISIBLE); loginBtn.setText(R.string.login_reconnect); loginBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { listener.onViewChange(MESSAGE_RECONNECT, null); } }); setHint(null, View.INVISIBLE); LinearLayout ll = (LinearLayout)inflater.inflate(R.layout.layout_login_error, null); ll.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); viewStub.removeAllViews(); viewStub.addView(ll); } private void setSyncViews() { Context context = UpnpApp.getContext(); tvDeviderLine.setVisibility(View.VISIBLE); loginBtn.setVisibility(View.INVISIBLE); setHint(context.getString(R.string.login_hint_synchronizing), View.VISIBLE); syncView = (SyncView) inflater.inflate(R.layout.layout_login_sync, null); viewStub.removeAllViews(); viewStub.addView(syncView); listener.onViewChange(MESSAGE_START_SYNC, syncView); } private void setChooseViews() { Context context = UpnpApp.getContext(); tvDeviderLine.setVisibility(View.VISIBLE); loginBtn.setVisibility(View.VISIBLE); loginBtn.setText(context.getString(R.string.connect)); setHint(context.getString(R.string.login_hint_choose), View.VISIBLE); ListView deviceList = (ListView) inflater.inflate(R.layout.layout_login_listview, null); // View v=initHeaderView(context); // deviceList.addHeaderView(v); initFooterView(context); deviceList.addFooterView(footerView); deviceList.setAdapter(adapter); deviceList.setOnItemClickListener(onItemClickListener); viewStub.removeAllViews(); viewStub.addView(deviceList); llBtn.setVisibility(View.GONE); llGradientCover.setVisibility(View.VISIBLE); // loginBtn.setOnClickListener(new OnClickListener() { // // @Override // public void onClick(View v) { // if(listener != null){ // listener.onViewChange(MESSAGE_CONNECT, null); // } // } // }); } // private View initHeaderView(Context context) { // ImageView iv=new ImageView(context); // iv.setLayoutParams(new android.widget.AbsListView.LayoutParams(Constant.SCREEN_WIDTH, 2) ); // iv.setBackgroundColor(context.getResources().getColor(R.color.login_hint_textcolor)); // // return iv; // } private void initFooterView(Context context) { footerView = LayoutInflater.from(context).inflate(R.layout.device_list_footerview, null); ImageView ivAnim=(ImageView) footerView.findViewById(R.id.iv_loading_more); new AnimUtil(context).initAnim(ivAnim,R.anim.login_seraching_anim); } private void setLoadingViews() { setHint(null,View.INVISIBLE); tvDeviderLine.setVisibility(View.GONE); llGradientCover.setVisibility(View.GONE); loginBtn.setVisibility(View.VISIBLE); loginBtn.setText(R.string.cancel); loginBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { listener.onViewChange(MESSAGE_CANCEL, null); } }); View loadingView = inflater.inflate(R.layout.layout_login_loading, null); loadingView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); viewStub.removeAllViews(); viewStub.addView(loadingView); } public void setAdapter(LoginAdapter adapter) { this.adapter = adapter; } /** * set login hint textview * @param text * @param visible */ public void setHint(String text,int visible){ if(loginHintTv != null){ loginHintTv.setVisibility(visible); loginHintTv.setText(text); } } private OnItemClickListener onItemClickListener = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parten, View view, int position, long id) { listener.onViewChange(MESSAGE_CHOSSE_DEVICE, String.valueOf(position)); listener.onViewChange(MESSAGE_CONNECT, null); } }; public void destroy(){ model.removeListener(StateModel.ChangeEvent.STATE_CHANGED, stateChangeListener); } }